package com.distribute.application.utils;

import java.text.DecimalFormat;
import java.util.Date;
import java.util.Map;
import java.util.SortedMap;
import java.util.TreeMap;

import com.distribute.application.api.utils.IpUtil;
import com.distribute.application.api.utils.PayUtil;
import com.distribute.application.api.utils.wx.AuthUtil;
import com.distribute.application.api.utils.wx.CertHttpUtil;
import com.distribute.application.api.utils.wx.SignUtils;
import com.distribute.application.api.utils.wx.WXPayUtil;
import com.distribute.framework.core.web.helper.Utils;
import com.distribute.framework.model.Member;

public class WechatPay {
	/**
	 * 订单退款
	 * @param member
	 * @param money
	 * @return
	 */
        public static int  orderBackMoney(Member member,Double money){
        	// 1.0 拼凑企业支付需要的参数
			String appid = AuthUtil.APPID; // 微信公众号的appid
			String mch_id = AuthUtil.MCHID; // 商户号
			String nonce_str = IpUtil.getRandomStringByLength(32); // 生成随机数
			String partner_trade_no = "otk"+member.getUid()+""+new Date().getTime(); // 生成商户订单号
			String openid = member.getOpenid(); // 支付给用户openid
			String check_name = "NO_CHECK"; // 是否验证真实姓名呢
			String re_user_name = ""; // 收款用户姓名(非必须)
			DecimalFormat decimalFormat = new DecimalFormat("###################.###########");
			String amount = decimalFormat.format(money*100); // 企业付款金额，最少为100，单位为分
			String desc = "恭喜您，提现成功，钱已再您的微信账户中了！"; // 企业付款操作说明信息。必填。
			String spbill_create_ip = IpUtil.getIpAddr(Utils.getServletRequest()); // 用户的ip地址
			// 2.0 生成map集合
			SortedMap<Object, Object> packageParams = new TreeMap<Object, Object>(); 
			packageParams.put("mch_appid", appid); // 微信公众号的appid
			packageParams.put("mchid", mch_id); // 商务号
			packageParams.put("nonce_str", nonce_str); // 随机生成后数字，保证安全性

			packageParams.put("partner_trade_no", partner_trade_no); // 生成商户订单号
			packageParams.put("openid", openid); // 支付给用户openid
			packageParams.put("check_name", check_name); // 是否验证真实姓名呢
			packageParams.put("re_user_name", re_user_name);// 收款用户姓名
			packageParams.put("amount", amount); // 企业付款金额，单位为分
			packageParams.put("desc", desc); // 企业付款操作说明信息。必填。
			packageParams.put("spbill_create_ip", spbill_create_ip); // 调用接口的机器Ip地址
			
			String sign  = SignUtils.creatSign("utf-8",packageParams);
			
			//4   封装退款对象
			packageParams.put("sign", sign);
			
			//5  将当前的map结合转化成xml格式
			String reuqestXml = WXPayUtil.getRequestXml(packageParams);
			System.out.println("请求xml---：");
			System.out.println(reuqestXml);
				// 6.0获取需要发送的url地址
				String wxUrl = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; // 获取退款的api接口
				 
				
				System.out.println("发送前的xml为：" + reuqestXml);
				try {
				// 7,向微信发送请求转账请求
				String returnXml = CertHttpUtil.postData(wxUrl, reuqestXml, AuthUtil.MCHID, AuthUtil.CERTPATH);

				System.out.println("返回的returnXml为:" + returnXml);

				// 8，将微信返回的xml结果转成map格式
				Map<String, String> returnMap = PayUtil.doXMLParse(returnXml);
				if (returnMap.get("return_code").equals("SUCCESS")) {
					return 1;
				}else {
					return 2;
				}
				} catch (Exception e) {
					return 2;
				}
        }
}
